package org.jsola.hr.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.dto.CompanyAllEmpInfoRequireUpdateDTO;
import org.jsola.hr.dto.CompanyEmpInfoRequireAddDTO;
import org.jsola.hr.dto.CompanyEmpInfoRequireUpdateDTO;
import org.jsola.hr.query.CompanyEmpInfoRequireQuery;
import org.jsola.hr.vo.CompanyEmpAllInfoRequireVO;
import org.jsola.hr.vo.CompanyEmpInfoRequireListVO;
import org.jsola.hr.vo.CompanyEmpInfoRequireVO;

import java.util.List;

/**
 * @author zhr
 */
@Api(tags = "hr-公司员工所需信息")
public interface ICompanyEmpInfoRequireControllerAPI {

    /**
     * 新增公司员工所需信息
     * @param companyEmpInfoRequireAddDTO 公司员工所需信息新增实体
     * @return 公司员工所需信息展示对象
     */
    @ApiOperation(value = "新增公司员工所需信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyEmpInfoRequireAddDTO", dataType = "CompanyEmpInfoRequireAddDTO", value = "新增公司员工所需信息", paramType = "body")
    })
    Result<CompanyEmpInfoRequireVO> save(CompanyEmpInfoRequireAddDTO companyEmpInfoRequireAddDTO);


    /**
     * 修改公司员工所需信息
     * @param companyEmpInfoRequireUpdateDTO 公司员工所需信息
     * @return 更新数量
     */
    @ApiOperation(value = "修改公司员工所需信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyEmpInfoRequireUpdateDTO", dataType = "CompanyEmpInfoRequireUpdateDTO", value = "修改公司员工所需信息", paramType = "body")
    })
    Result<Integer> update(CompanyEmpInfoRequireUpdateDTO companyEmpInfoRequireUpdateDTO);






    /**
     * 根据公司员工所需信息id查询公司员工所需信息详情
     * @param companyEmpInfoRequireId 公司员工所需信息id
     * @return 公司员工所需信息详情
     */
    @ApiOperation(value="根据公司员工所需信息id查询公司员工所需信息详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyEmpInfoRequireId", dataType = "String", value = "公司员工所需信息id", paramType = "path")
    })
    Result<CompanyEmpInfoRequireVO> findById(String companyEmpInfoRequireId);


    /**
     * 查询公司员工所需信息
     * @param companyEmpInfoRequireQuery 公司员工所需信息查询参数
     * @return page
     */
    @ApiOperation(value="查询公司员工所需信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyEmpInfoRequireQuery", dataType = "CompanyEmpInfoRequireQuery", value = "公司员工所需信息查询参数", paramType = "query")
    })
    Result<List<CompanyEmpInfoRequireListVO>> listAll(CompanyEmpInfoRequireQuery companyEmpInfoRequireQuery);


     /**
     * 分页查询公司员工所需信息
     * @param companyEmpInfoRequireQuery 公司员工所需信息查询参数
     * @return page
     */
    @ApiOperation(value="分页查询公司员工所需信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyEmpInfoRequireQuery", dataType = "CompanyEmpInfoRequireQuery", value = "公司员工所需信息查询参数", paramType = "query")
    })
    Result<Page<CompanyEmpInfoRequireListVO>> page(CompanyEmpInfoRequireQuery companyEmpInfoRequireQuery);


    /**
     * 根据公司id查询公司员工所需信息详情
     *
     * @param companyId 公司员工所需信息id
     * @return 公司员工所需信息详情
     */
    @ApiOperation(value = "根据公司id查询公司员工所需信息详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path"),
            @ApiImplicitParam(name = "type", dataType = "String", value = "场景", paramType = "path")
    })
    Result<CompanyEmpAllInfoRequireVO> findByCompanyId(String companyId, String type);


    /**
     * 修改公司某一员工信息为(0:不需要,1:需要,2:必填)
     *
     * @param companyEmpInfoRequireId 公司员工所需信息id
     * @param code                    要修改的code
     * @param value                   要修改成的值
     * @return 公司员工所需信息详情
     */
    @ApiOperation(value = "修改某条数据某一员工信息为(0:不需要,1:需要,2:必填)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyEmpInfoRequireId", dataType = "String", value = "公司员工所需信息id", paramType = "path"),
            @ApiImplicitParam(name = "code", dataType = "String", value = "要修改的字段名", paramType = "path"),
            @ApiImplicitParam(name = "value", dataType = "Integer", value = "字段的值(0:不需要,1:需要,2:必填)", paramType = "path")
    })
    Result<Integer> updateInfoRequireById(String companyEmpInfoRequireId, String code, Integer value);


    /**
     * 修改公司某一员工信息为(0:不需要,1:需要,2:必填)
     *
     * @param companyId 公司员工所需信息id
     * @param code      要修改的code
     * @param value     要修改成的值
     * @return 公司员工所需信息详情
     */
    @ApiOperation(value = "修改公司某场景某一员工信息为(0:不需要,1:需要,2:必填)(公司id为all为修改全部公司)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path"),
            @ApiImplicitParam(name = "type", dataType = "String", value = "场景", paramType = "path"),
            @ApiImplicitParam(name = "code", dataType = "String", value = "要修改的字段名", paramType = "path"),
            @ApiImplicitParam(name = "value", dataType = "Integer", value = "字段的值(0:不需要,1:需要,2:必填)", paramType = "path")
    })
    Result<Integer> updateInfoRequireByCompanyId(String companyId, String type, String code, Integer value);


    /**
     * 修改公司员工所需信息
     *
     * @param companyAllEmpInfoRequireUpdateDTO 公司员工所需信息
     * @return 更新数量
     */
    @ApiOperation(value = "修改公司员工所需信息(员工信息和员工关联信息的)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyAllEmpInfoRequireUpdateDTO", dataType = "CompanyAllEmpInfoRequireUpdateDTO", value = "修改公司员工所需信息", paramType = "body")
    })
    Result<Integer> updateRalation(CompanyAllEmpInfoRequireUpdateDTO companyAllEmpInfoRequireUpdateDTO);
}

